//
//  IMAdjustService.h
//  DualMediationSDK
//
//  Created by YeJary on 2025/1/27.
//

#import <Foundation/Foundation.h>
#import "IMAdjustModels.h"

NS_ASSUME_NONNULL_BEGIN

/**
 * Adjust事件上报服务
 * 
 * 功能说明：
 * - 提供Adjust事件上报功能
 * - 支持基础事件、参数事件和收入事件
 * - 自动检查SDK初始化状态
 * - 提供同步和异步上报方式
 * 
 * 使用注意：
 * - 必须在SDK初始化之后调用，否则会报错
 * - 建议在主线程调用
 * - 支持事件参数和收入追踪
 */
@interface IMAdjustService : NSObject

/**
 * 获取共享实例
 * @return 服务实例
 */
+ (instancetype)sharedService;

/**
 * 检查Adjust是否已初始化
 * @return YES表示已初始化，NO表示未初始化
 */
- (BOOL)isAdjustInitialized;

/**
 * 上报基础事件（同步）
 * @param eventId 事件ID
 * @return 上报结果
 */
- (IMAdjustResult *)trackEvent:(NSString *)eventId;

/**
 * 上报基础事件（异步）
 * @param eventId 事件ID
 * @param completion 完成回调
 */
- (void)trackEvent:(NSString *)eventId completion:(nullable IMAdjustCompletionBlock)completion;

/**
 * 上报带参数的事件（同步）
 * @param eventId 事件ID
 * @param parameters 事件参数
 * @return 上报结果
 */
- (IMAdjustResult *)trackEvent:(NSString *)eventId parameters:(nullable NSDictionary<NSString *, NSString *> *)parameters;

/**
 * 上报带参数的事件（异步）
 * @param eventId 事件ID
 * @param parameters 事件参数
 * @param completion 完成回调
 */
- (void)trackEvent:(NSString *)eventId 
        parameters:(nullable NSDictionary<NSString *, NSString *> *)parameters 
        completion:(nullable IMAdjustCompletionBlock)completion;

/**
 * 上报收入事件（同步）
 * @param eventId 事件ID
 * @param revenue 收入金额
 * @param currency 货币代码
 * @return 上报结果
 */
- (IMAdjustResult *)trackRevenueEvent:(NSString *)eventId revenue:(NSNumber *)revenue currency:(NSString *)currency;

/**
 * 上报收入事件（异步）
 * @param eventId 事件ID
 * @param revenue 收入金额
 * @param currency 货币代码
 * @param completion 完成回调
 */
- (void)trackRevenueEvent:(NSString *)eventId 
                  revenue:(NSNumber *)revenue 
                 currency:(NSString *)currency 
               completion:(nullable IMAdjustCompletionBlock)completion;

/**
 * 使用配置上报事件（同步）
 * @param config 事件配置
 * @return 上报结果
 */
- (IMAdjustResult *)trackEventWithConfig:(IMAdjustEventConfig *)config;

/**
 * 使用配置上报事件（异步）
 * @param config 事件配置
 * @param completion 完成回调
 */
- (void)trackEventWithConfig:(IMAdjustEventConfig *)config completion:(nullable IMAdjustCompletionBlock)completion;

/**
 * 设置Adjust初始化状态（内部使用）
 * @param initialized 是否已初始化
 */
- (void)setAdjustInitialized:(BOOL)initialized;

@end

NS_ASSUME_NONNULL_END